﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace TrocaFigurinhas.Models.BusinessLayer
{
    public class BuscaFigurinhasBL
    {
        private ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer();

        public List<OfertaTrocaModel> BuscarFigurinhasOferecidas(string user, string nomeFigurinha)
        {
            List<OfertaTrocaModel> ofertasFigurinhasOferecidas = new List<OfertaTrocaModel>();

            var ofertas =  from Oferta      in contexto.OfertasSet
                           join Solicitante in contexto.FigurinhasSolicitanteSet 
                             on Oferta.Id equals Solicitante.OfertasId
                          where Solicitante.Figurinha.Nome.Contains(nomeFigurinha)
                             && Oferta.Usuario.Login.ToLower() != user.ToLower()
                             
                          select Oferta;

            ofertas = ofertas.Where(a => a.TrocaSolicitante == null || !a.TrocaSolicitante.TrocaRealizada); // Ainda não houve trocas efetivas

            OfertasTrocasBL troca = new OfertasTrocasBL();
            foreach (Ofertas oferta in ofertas.ToList<Ofertas>()) {
                OfertaTrocaModel ofertaTroca = troca.casarComDesejadas(user, oferta);
                ofertasFigurinhasOferecidas.Add(ofertaTroca);
            }

            if (ofertasFigurinhasOferecidas.Count == 0)
            {
                throw new BusinessException("Nenhuma oferta encontrada.");
            }

            return ofertasFigurinhasOferecidas;
        }

        public List<OfertaTrocaModel> BuscarFigurinhasDesejadas(string user, string nomeFigurinha)
        {

            List<OfertaTrocaModel> ofertasFigurinhasDesejadas = new List<OfertaTrocaModel>();

            var ofertas = from Oferta in contexto.OfertasSet
                          join Desejado in contexto.FigurinhasSolicitanteSet
                            on Oferta.Id equals Desejado.OfertasId
                          where Desejado.Figurinha.Nome.Contains(nomeFigurinha)
                             && Oferta.Usuario.Login.ToLower() != user.ToLower()

                          select Oferta;

            ofertas = ofertas.Where(a => a.TrocaSolicitante == null || !a.TrocaSolicitante.TrocaRealizada); // Ainda não houve trocas efetivas

            OfertasTrocasBL troca = new OfertasTrocasBL();
            foreach (Ofertas oferta in ofertas.ToList<Ofertas>())
            {
                OfertaTrocaModel ofertaTroca = troca.casarComOfertadas(user, oferta);
                ofertasFigurinhasDesejadas.Add(ofertaTroca);
            }

            if (ofertasFigurinhasDesejadas.Count == 0)
            {
                throw new BusinessException("Nenhuma oferta encontrada.");
            }

            return ofertasFigurinhasDesejadas;
            
        }
    }
}